/* 
 * File:   main.cpp
 * Author: lazzamar
 *
 * Created on 19 novembre 2012, 15:31
 */

#include <iostream>
using namespace std;
#include "ErreurInterpreteur.h"
#include "LecteurPhraseAvecArbre.h"

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
	char nomFich[255];
	if (argc != 2) {
		cout << "Usage : " << argv[0] << " nom_fichier_source" << endl << endl;
		cout << "Entrez le nom du fichier que voulez-vous interpreter : ";
		cin.getline(nomFich, sizeof(nomFich));
	} else
		strncpy(nomFich, argv[1], sizeof(nomFich));
	
	try{
		LecteurPhraseAvecArbre lp(nomFich);

		int c=-1;

		while(c!=0 && c!=1 && c!=2 && c!=3){
			cout << "==== Menu ====" << endl
				<< "1. Analyse avec arbre" << endl
				<< "2. Analyse avec arbre et table" << endl
				<< "3. Interprétation complète" <<endl
				<< "0. Quitter" << endl << endl
				<< "Choix ? ";

			cin >> c;
		}
		switch(c){
			case 1 :
				lp.analyse();
				cout << endl << "Arbre Abstrait : " << endl;
				cout         << "================"  << endl;
				lp.getArbre()->afficher();
				break;
			case 2 :
				lp.analyse();
				cout << endl << "Arbre Abstrait : " << endl;
				cout         << "================"  << endl;
				lp.getArbre()->afficher();
				cout << endl << "Table des symboles :" << lp.getTs();
				break;
			case 3 :
				lp.analyse();
				cout << endl << "Arbre Abstrait : " << endl;
				cout         << "================"  << endl;
				lp.getArbre()->afficher();
				cout << endl << "Table des symboles avant evaluation : " << lp.getTs();
				cout << endl << "Evaluation de l'arbre (interpretation)..." << endl;
				lp.getArbre()->getValeur();
				cout << endl << "Table des symboles apres evaluation : " << lp.getTs();
				break;
			case 0 :
				cout << "Fin du programme." << endl;
				break;
		}
	}
	catch(ErreurMaths em){
		cout << em.what();
	}	
	catch(ErreurInitialisation ei){
		cout << ei.what();
	}
	catch(ErreurInterpreteur e){
		cout << e.what();
	}
	catch(...){
		cout << "Une erreur est survenue" << endl;
	}
	
	return 0;
}
